/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.hochschild.sgv.util;

import com.hochschild.sgv.domain.PersonalSap;
import com.hochschild.sgv.domain.Solicitud;
import com.hochschild.sgv.domain.Usuario;
import com.hochschild.sgv.service.EquipoManager;
import com.hochschild.sgv.service.PlanificacionManager;
import com.hochschild.sgv.service.implementacion.SimpleEquipoManager;
import com.hochschild.sgv.service.implementacion.SimplePlanificacionManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 * @author Christian Alexander Morales Vargas (cmorales.corporacion@gmail.com)
 */
public class ControlPlanificacion {
    
    private SimpleEquipoManager equipoManager= new SimpleEquipoManager();
    private SimplePlanificacionManager planificacionManager= new SimplePlanificacionManager();
    
    private static final String DESCANSO= "rojo";
    private static final String LABORALES= "azul";
    private String valoresParaValidacion="";
    
    public void cargarPlanificacion(HttpServletRequest request,Usuario usuario){
        Date fechaNow = new Date();
            valoresParaValidacion = "";
         int anioActual = FechaUtil.getAnioActual();
            Date date_ini = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anioActual + 0));    
            Date date_fin = FechaUtil.stringaToDateDDMMYYYY("31-12-" + String.valueOf(anioActual + 1)); 
                System.out.println("anioActual: " + anioActual + " fecha: " + fechaNow);
         int cantDiasAnioActual = FechaUtil.getDiasXAnio(date_ini) ;
         int cantDiasAnioProximo = FechaUtil.getDiasXAnio(date_fin) ;

         Date date_iniBackup = date_ini;
         int cantDiasDosanios = cantDiasAnioActual + cantDiasAnioProximo;
         
         List<DiasCalendario> lstDiasCalendario;
         lstDiasCalendario = this.ListarDiasCalendario(date_iniBackup, date_fin, cantDiasDosanios);
         request.setAttribute("lstDiasCalendario", lstDiasCalendario);
         
       
                System.out.println("usuario.getIdUsuario(): " + usuario.getIdUsuario() + " - " + usuario.getIdPuesto());
            
       List<PersonalSap> lstPersonalSaps = listarEquipoSap(usuario.getIdUsuario(),"", usuario.getIdPuesto());
       request.setAttribute("lstPersonalSaps", lstPersonalSaps);  
       request.setAttribute("cantColaboradores", lstPersonalSaps.size());
        
       List lstRangoFechasEquipo = listarRangosFechasEquipoSql(lstPersonalSaps,usuario.getIdPuesto(), anioActual );
       List lstDiasAPlanificarYGozadas= new ArrayList();
            lstDiasAPlanificarYGozadas= listarDiasAPlanificarYGozadas( lstRangoFechasEquipo, cantDiasDosanios, anioActual, cantDiasAnioActual,true );
       
       request.setAttribute("valoresParaValidacion", valoresParaValidacion);
       request.setAttribute("lstDiasAPlanificarYGozadas", lstDiasAPlanificarYGozadas);
       
            System.out.println("cantDiasDosanios: " + cantDiasDosanios);
       request.setAttribute("idUsuarioAprobador", usuario.getIdPuesto());
       request.setAttribute("diaAnio", FechaUtil.getDiadelAnio(fechaNow));
       request.setAttribute("cantdias", cantDiasDosanios);
       request.setAttribute("anioActual", FechaUtil.getAnioActual());
       int cantMinima = planificacionManager.cantMinimaForRangos();
       request.setAttribute("cantMinima", cantMinima);
       
       int cantDiasHastaElPresenteMes= this.cantDiasTranscurridosHastaElPresenteMes();
            request.setAttribute("cantDiasHastaElPresenteMes", cantDiasHastaElPresenteMes); 
            
//            Iterator i5= lstDiasAPlanificarYGozadas.iterator();
//       int contDiasPlanificados=1;
//        while (i5.hasNext()) {
//            String[] arrayFechas = (String[]) i5.next();
//                System.out.println("");
//                System.out.println("*********************************************** Nuevo Arreglo " + contDiasPlanificados +  ": **************************************************************");
//                System.out.println("");
//                for (int i = 0; i < arrayFechas.length; i++) {
//                    System.out.println("fechas[" + i + "]: " + arrayFechas[i]);
//                }
//                
//                contDiasPlanificados++;
//        }
        
        
        
    }
    
    
    public void cargarMiPlanificacion(HttpServletRequest request, Usuario usuario){
         Date fechaNow = new Date();
            valoresParaValidacion = "";
         int anioActual = FechaUtil.getAnioActual();
         Date date_ini = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anioActual + 0));    
         Date date_fin = FechaUtil.stringaToDateDDMMYYYY("31-12-" + String.valueOf(anioActual + 1)); 
                System.out.println("anioActual: " + anioActual + " fecha: " + fechaNow);
         int cantDiasAnioActual = FechaUtil.getDiasXAnio(date_ini) ;
         int cantDiasAnioProximo = FechaUtil.getDiasXAnio(date_fin) ;

         Date date_iniBackup = date_ini;
         int cantDiasDosanios = cantDiasAnioActual + cantDiasAnioProximo;
         
         List<DiasCalendario> lstDiasCalendario;
            lstDiasCalendario = this.ListarDiasCalendario( date_iniBackup, date_fin, cantDiasDosanios);
            request.setAttribute("lstDiasCalendario", lstDiasCalendario);
            
       
                System.out.println("usuario.getIdUsuario(): " + usuario.getIdUsuario());
       List<PersonalSap> lstMisDatosSql = listarMisDatosSql(request,usuario.getIdUsuario());
            request.setAttribute("lstPersonalSaps", lstMisDatosSql);  
            request.setAttribute("cantColaboradores", lstMisDatosSql.size());
            
       List lstRangoFechasEquipo = listarRangosFechasEquipoSql(lstMisDatosSql,usuario.getIdPuestoJefeInmediato(), anioActual );

       List lstDiasAPlanificarYGozadas= new ArrayList();
            lstDiasAPlanificarYGozadas= listarDiasAPlanificarYGozadas( lstRangoFechasEquipo, cantDiasDosanios, anioActual, cantDiasAnioActual, true );
            request.setAttribute("valoresParaValidacion", valoresParaValidacion);
            request.setAttribute("lstDiasAPlanificarYGozadas", lstDiasAPlanificarYGozadas);
            
                System.out.println("cantDiasDosanios: " + cantDiasDosanios);
           request.setAttribute("idUsuarioAprobador", usuario.getIdPuestoJefeInmediato());
           request.setAttribute("diaAnio", FechaUtil.getDiadelAnio(fechaNow));
           request.setAttribute("cantdias", cantDiasDosanios); 
           request.setAttribute("anioActual", FechaUtil.getAnioActual());
       int cantMinima = planificacionManager.cantMinimaForRangos();
           request.setAttribute("cantMinima", cantMinima);
       int cantDiasHastaElPresenteMes= this.cantDiasTranscurridosHastaElPresenteMes();
           request.setAttribute("cantDiasHastaElPresenteMes", cantDiasHastaElPresenteMes);   
        
    }
    
    public void cargarLstCompaneros(HttpServletRequest request, Usuario usuario){
                System.out.println("cargarLstCompaneros");
         Date fechaNow = new Date();
            valoresParaValidacion = "";
         int anioActual = FechaUtil.getAnioActual();
         Date date_ini = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anioActual + 0));    
         Date date_fin = FechaUtil.stringaToDateDDMMYYYY("31-12-" + String.valueOf(anioActual + 1)); 
                System.out.println("anioActual: " + anioActual + " fecha: " + fechaNow);
         int cantDiasAnioActual = FechaUtil.getDiasXAnio(date_ini) ;
         int cantDiasAnioProximo = FechaUtil.getDiasXAnio(date_fin) ;

         Date date_iniBackup = date_ini;
         int cantDiasDosanios = cantDiasAnioActual + cantDiasAnioProximo;
         
         List<DiasCalendario> lstDiasCalendario;
            lstDiasCalendario = this.ListarDiasCalendario(date_iniBackup, date_fin, cantDiasDosanios);
            request.setAttribute("lstDiasCalendario", lstDiasCalendario);   
            
                System.out.println("usuario.getIdPuestoJefeInmediato(): " + usuario.getIdPuestoJefeInmediato() + " usuario.getIdUsuario(): " + usuario.getIdUsuario());
       String idJefe=usuario.getIdUsuarioJefe();

       List<PersonalSap> lstPersonalSaps = listarEquipoSap(idJefe, usuario.getIdUsuario(), usuario.getIdPuesto());
           request.setAttribute("lstPersonalSaps", lstPersonalSaps);  
           request.setAttribute("cantColaboradores", lstPersonalSaps.size());
       List lstRangoFechasEquipo = listarRangosFechasEquipoSql(lstPersonalSaps,usuario.getIdPuestoJefeInmediato(), anioActual );
       
       List lstDiasAPlanificarYGozadas= new ArrayList();
            lstDiasAPlanificarYGozadas=listarDiasAPlanificarYGozadas(lstRangoFechasEquipo, cantDiasDosanios, anioActual, cantDiasAnioActual, true );
            request.setAttribute("valoresParaValidacion", valoresParaValidacion);
            request.setAttribute("lstDiasAPlanificarYGozadas", lstDiasAPlanificarYGozadas);
            
                System.out.println("cantDiasDosanios: " + cantDiasDosanios);
           request.setAttribute("idUsuarioAprobador", usuario.getIdPuestoJefeInmediato());
           request.setAttribute("diaAnio", FechaUtil.getDiadelAnio(fechaNow));
           request.setAttribute("cantdias", cantDiasDosanios);
           request.setAttribute("anioActual", FechaUtil.getAnioActual());
       int cantMinima = planificacionManager.cantMinimaForRangos();
           request.setAttribute("cantMinima", cantMinima);
       int cantDiasHastaElPresenteMes= this.cantDiasTranscurridosHastaElPresenteMes();
           request.setAttribute("cantDiasHastaElPresenteMes", cantDiasHastaElPresenteMes); 
    }
    
    public void cargarLstVertical(HttpServletRequest request, Usuario usuario){
        Date fechaNow = new Date();
            valoresParaValidacion = "";
         int anioActual = FechaUtil.getAnioActual();
            Date date_ini = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anioActual + 0));    
            Date date_fin = FechaUtil.stringaToDateDDMMYYYY("31-12-" + String.valueOf(anioActual + 1)); 
                System.out.println("anioActual: " + anioActual + " fecha: " + fechaNow);
         int cantDiasAnioActual = FechaUtil.getDiasXAnio(date_ini) ;
         int cantDiasAnioProximo = FechaUtil.getDiasXAnio(date_fin) ;

         Date date_iniBackup = date_ini;
         int cantDiasDosanios = cantDiasAnioActual + cantDiasAnioProximo;
//         Dias Calendario L M M J V
         int[]cantDiaXMes= new int[24];
         int j=0;
             for (int i = 0; i < 24; i++) {
                if (i==12) {anioActual++; j=0; }
                    cantDiaXMes[i]=FechaUtil.cantidadDiasXNumMes(j+1,anioActual );
                    j++;
            }
             
         List<DiasCalendario> lstDiasCalendario;
         lstDiasCalendario = this.ListarDiasCalendario(date_iniBackup, date_fin, cantDiasDosanios);
         List lstCalendario= new ArrayList();
         
         int inicioDeMes=0;
         int cantDiasAcumulados=0;
         for (int i = 0; i < 24; i++) {
            cantDiasAcumulados+= cantDiaXMes[i];
            lstCalendario.add(lstDiasCalendario.subList(inicioDeMes, cantDiasAcumulados));
            inicioDeMes+=cantDiaXMes[i];  
         }
//         Data
         anioActual--;
         List<PersonalSap> lstPersonalSaps = listarEquipoSap(usuario.getIdUsuario(),"", usuario.getIdPuesto());
         List lstRangoFechasEquipo = listarRangosFechasEquipoSql(lstPersonalSaps,usuario.getIdPuesto(), anioActual );
         List lstDiasAPlanificarYGozadas= new ArrayList();
            lstDiasAPlanificarYGozadas= listarDiasAPlanificarYGozadas( lstRangoFechasEquipo, cantDiasDosanios, anioActual, cantDiasAnioActual, false );
            
//       Particiones de los Arrays  
       Iterator it= lstDiasAPlanificarYGozadas.iterator();
       int cantColaboradores= lstDiasAPlanificarYGozadas.size();
       List arrayDiasPlanificados= new ArrayList();
       int cont=0;  int indiceMes= 0;   int cantDiaXMesLength= 0;
       j=0;
       
        while (it.hasNext()) {
            String[] arrayFechas = (String[]) it.next();
            indiceMes=0;
                 for (int k = 1; k < arrayFechas.length; k++) {
                    cantDiaXMesLength= cantDiaXMes[indiceMes];
                    String[] array= new String[cantDiaXMesLength];
                        for (int i = 0; i < cantDiaXMesLength; i++) {
                            array[i]= arrayFechas[k];
                            k++;
                        }
                        k--;
                        indiceMes++;
                        arrayDiasPlanificados.add(array);
                  }  
         }
        
        System.out.println("arrayDiasPlanificados Size: " + arrayDiasPlanificados.size());
        
        //        Ordenamiento de los Arrays
        Iterator it2= arrayDiasPlanificados.iterator();
        Object[] obj= new Object[arrayDiasPlanificados.size()];
        int ii=0;   int iii=0;
        cont= 0;    indiceMes=0;
        
        while (it2.hasNext()) {
             String[] arrayFechas = (String[]) it2.next();
             indiceMes++;
//                System.out.println(indiceMes + " *********************************************************");
//                System.out.print("indiceMes: " + indiceMes + ": ");
//            for (int i = 0; i < arrayFechas.length; i++) {
//                System.out.print(arrayFechas[i] + " - ");
//            }
//            System.out.println("");
            obj[ii]= arrayFechas;
            ii+=cantColaboradores;
            cont++;
            if(cont==24){
                cont=0;
                iii++;
//                System.out.println("iii: " + iii);
                ii=iii;
            }
        }
        System.out.println(" arrayDiasPlanificados.size(): " +  arrayDiasPlanificados.size());
//        indiceMes=0;
//        for (Object object : obj) {
//            String[] arrayFechas =(String[]) object;
//            indiceMes++;
//                System.out.println(indiceMes + " ---*********************************************************");
//                System.out.print("indiceMes: " + indiceMes + ": ");
//            for (int i = 0; i < arrayFechas.length; i++) {
//                System.out.print(arrayFechas[i] + " - ");
//            }
//            System.out.println("");
//        }
       
         request.setAttribute("anioActual", FechaUtil.getAnioActual());
         request.setAttribute("lstCalendario", lstCalendario);
         request.setAttribute("cantColaboradores", cantColaboradores);
         request.setAttribute("diasPlanificados", obj);
         request.setAttribute("lstPersonalSaps", lstPersonalSaps);  
         request.setAttribute("cantColaboradores", lstPersonalSaps.size());
         
    }
    
    private List<DiasCalendario> ListarDiasCalendario( Date date_ini, Date date_fin, int cantDiasDosanios ){
        
        int diaDeLaSemanaIni = FechaUtil.getNumeroDiaSemana(date_ini ); 
        int diadeInicio = diaDeLaSemanaIni;

        DiasCalendario diasCalendario;
        List<DiasCalendario> lstDiasCalendario = new ArrayList<DiasCalendario>(); //Arreglo donde se almacena los dias
        
        int cont=0;
//        System.out.println("**********************  Se Carga los Primeros dias antes del Lunes  ***************");     
        String fechaString;
          while (diadeInicio!=1) {    //Mientras que no sea Lunes  
              fechaString = FechaUtil.dateToString(date_ini);
                    switch (diadeInicio) {
                          case 0:
                          case 6:    
                              diasCalendario = new DiasCalendario(FechaUtil.getDiaDelMesString(fechaString), DESCANSO, FechaUtil.getNameDay(diadeInicio).substring(0, 1), fechaString);
                              break;
                          default:
                              diasCalendario = new DiasCalendario(FechaUtil.getDiaDelMesString(fechaString), LABORALES, FechaUtil.getNameDay(diadeInicio).substring(0, 1), fechaString);
                      }
//                        System.out.println("Numero Dia: " + diasCalendario.getNumerodia() + " - Tipodia: " + diasCalendario.getTipoDeDia() + " - NombreDia: " + diasCalendario.getNombreDia() + " - Fecha: " + diasCalendario.getFecha() );
                        lstDiasCalendario.add(diasCalendario);
                        
                  if (date_ini.equals(date_fin))
                         diadeInicio = 1;
                  else{
                         date_ini = FechaUtil.sumarCantDiasAFecha(date_ini,  1);
                         diadeInicio = FechaUtil.getNumeroDiaSemana(date_ini );
                  }
                  cont++;
            }
    
//          System.out.println("***************  FIN Carga los Primeros dias antes del Lunes  *****************");

//          System.out.println("************************  Carga del Resto dias      **********************");      
            int finsemana=0;
            for (int i = cont; i < cantDiasDosanios; i++) {
                fechaString = FechaUtil.dateToString(date_ini );
                finsemana++;
                if(finsemana==6)        //Sabado
                      diasCalendario = new DiasCalendario(FechaUtil.getDiaDelMesString(fechaString), DESCANSO, FechaUtil.getNameDay(finsemana).substring(0, 1), fechaString);
                else if(finsemana==7){  //Domingo
                      diasCalendario = new DiasCalendario(FechaUtil.getDiaDelMesString(fechaString), DESCANSO, FechaUtil.getNameDay(0).substring(0, 1), fechaString);
                      finsemana=0;
                }else{
                    diasCalendario = new DiasCalendario(FechaUtil.getDiaDelMesString(fechaString), LABORALES, FechaUtil.getNameDay(finsemana).substring(0, 1), fechaString);
                }
                     lstDiasCalendario.add(diasCalendario);
                     date_ini  = FechaUtil.sumarCantDiasAFecha(date_ini, 1);
            }
            
        //
        return lstDiasCalendario;
    }
    
     private List<PersonalSap> listarEquipoSap( String idUsuario, String excluirIdUsuario, String idPuestoUsuario){
        //Obtienes una Lista de Subordinados SAP
        List<PersonalSap> lstPersonalSaps = equipoManager.consultarEquipo(idUsuario.toUpperCase(),excluirIdUsuario, idPuestoUsuario);//2 es x Jefe
                System.out.println("listarEquipoSap cantColaboradores: " + lstPersonalSaps.size());
        return lstPersonalSaps;
 }
 
        private List<PersonalSap> listarMisDatosSql(HttpServletRequest request, String idUsuario){
        //Obtienes una Lista con los Datos del Colaborador
        PersonalSap personalSap = new PersonalSap();
        HttpSession session = request.getSession();
        String nombreCompleto ="";
        int saldo = 0;
        Usuario usuario = (Usuario) session.getAttribute("session_usuario"); 
        nombreCompleto = usuario.getNombreUsuario().trim() + " " + usuario.getApellidoUsuario().trim();
            System.out.println("usuario.getIdPersonal(): " + usuario.getIdPersonal() + " usuario.getIdPuesto(): " + usuario.getIdPuesto() + " usuario.getIdPuestoJefeInmediato(): " + usuario.getIdPuestoJefeInmediato() + " usuario.getIdUsuario(): " + usuario.getIdUsuario() + "  usuario.getPuestoUsuario(): " + usuario.getPuestoUsuario() + " usuario.getNombreUsuario(): " + usuario.getNombreUsuario() + " usuario.getApellidoUsuario(): " + usuario.getApellidoUsuario() + " usuario.getSaldoVacaciones(): " +  usuario.getSaldoVacaciones() );
            personalSap.setIdUsuario(usuario.getIdUsuario());
            personalSap.setCodigoPersonal(usuario.getIdPersonal());
            personalSap.setNombreCompleto(nombreCompleto);
            personalSap.setCodigoPosicion(usuario.getIdPuesto());
            personalSap.setNombrePosicion(usuario.getPuestoUsuario());
            saldo = planificacionManager.consultarSaldo(usuario.getIdUsuario());
            personalSap.setSaldoVacaciones(saldo);
            //////personalSap.setSaldoVacaciones(usuario.getSaldoVacaciones());
            /////personalSap.setDiasPlanificados( equipoDao.getSumDiasPlanificados(personalSap.getIdUsuario()));
            personalSap.setDiasPlanificados(0);
                System.out.println("personalSap: " + personalSap.getDiasPlanificados() + " saldo: " + saldo);
            List<PersonalSap> lstPersonalSql = new ArrayList<PersonalSap>();
            lstPersonalSql.add(personalSap);
        
                System.out.println("cantColaboradores: " + lstPersonalSql.size());
        return lstPersonalSql;
 }
        
     private List listarRangosFechasEquipoSql(List<PersonalSap> lstPersonalSaps, String idUsuario, int anioActual){
        List rangosFechasEquipo = new ArrayList();
        Iterator it = lstPersonalSaps.iterator();
        PersonalSap personal;
            while (it.hasNext()){
               personal = (PersonalSap) it.next();
                    System.out.println("personal.getIdUsuario: " + personal.getIdUsuario() + " - idUsuario: " + idUsuario + " - aniActual: " + anioActual);
               rangosFechasEquipo.add(planificacionManager.consultarRangosFechasEquipo(personal.getIdUsuario(), idUsuario, anioActual));
            }
        return rangosFechasEquipo;
     }
     
     private List listarDiasAPlanificarYGozadas( List lstRangosFechasEquipo, int cantDiasDosanios, int anioActual, int cantDiasAnioActual, boolean adjuntaDiasGozados){
         
         Date date_ini = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anioActual + 0));    
         Date date_fin = FechaUtil.stringaToDateDDMMYYYY("31-12-" + String.valueOf(anioActual + 1)); 
         Date fechanow = new Date();
         fechanow = FechaUtil.formatToDateSqlYYYYMMDD_DDMMYYYY(fechanow);
         int numdia = FechaUtil.getDiadelAnio(fechanow) ;
                System.out.println("listarDiasAPlanificarYGozadas fechanow: " + fechanow + " date_ini: " + date_ini + " numdia: " + numdia);
         List lstDiasAPlanificarYGozadas = new ArrayList();
         Iterator it = lstRangosFechasEquipo.iterator();
         Iterator it2; 
         Solicitud slt;
         String[] diasAPlanificar; 
         String[] diasGozados; 
         String IdUsuarioSolicitante="";
         while (it.hasNext()){
             List<Solicitud> lstSolicitud = (List<Solicitud>) it.next();
                  it2 = lstSolicitud.iterator(); 
                        IdUsuarioSolicitante = lstSolicitud.get(0).getIdUsuarioSolicitante();
                            System.out.println("IdUsuarioSolicitante: " + IdUsuarioSolicitante);
                        diasAPlanificar  = new String[cantDiasDosanios + 1]; 
                        diasAPlanificar = clearArrayPlanificar(diasAPlanificar,numdia, Constantes.SOLICITUD_BLANCO_PLANIFICADA_PASADA,"");
                        diasGozados  = new String[cantDiasDosanios + 1]; 
                        diasGozados = clearArray(diasGozados,Constantes.SOLICITUD_DIAS_LIBRESGOZADAS);
                        while (it2.hasNext()) {                 
                            slt = (Solicitud)it2.next();
                            diasAPlanificar = incorporarRangosFechas(diasAPlanificar, FechaUtil.formatToDateYYYYMMDD_DDMMYYYY(slt.getFechaInicio()), FechaUtil.formatToDateYYYYMMDD_DDMMYYYY(slt.getFechaFin()), fechanow, anioActual, cantDiasAnioActual, slt.getIdUsuarioSolicitante());
                        }
                            diasAPlanificar = incorporarDiasLibresSap(diasAPlanificar, date_ini, date_fin, IdUsuarioSolicitante, anioActual, cantDiasAnioActual); 
                            diasGozados = incorporarDiasGozadosSap(diasGozados, date_ini, date_fin, IdUsuarioSolicitante, anioActual, cantDiasAnioActual);
                            lstDiasAPlanificarYGozadas.add(diasAPlanificar);
                            if(adjuntaDiasGozados)lstDiasAPlanificarYGozadas.add(diasGozados);
         } 
         System.out.println("valoresParaValidacion: " + valoresParaValidacion);
         return lstDiasAPlanificarYGozadas;
     }
     
     
     private String[] incorporarRangosFechas(String[] diasAPlanificar, Date fechaInicio, Date fechaFin, Date fechanow, int anioActual, int cantDiasAnioActual, String solicitante){
         int diaInicio=0; int difDias=0; int dianow = 0;
         int anio = 0;
         Date fechaHelp = FechaUtil.stringaToDateDDMMYYYY("01-01-" + String.valueOf(anioActual));
         if (fechaInicio!=null) {
             diaInicio = FechaUtil.getDiadelAnio(fechaInicio);
             dianow = FechaUtil.getDiadelAnio(fechanow);
             anio = FechaUtil.getAnio(fechaInicio);
             if (anio < anioActual) {
                 if(!valoresParaValidacion.equals(""))valoresParaValidacion+=",";
                 difDias = Integer.parseInt(String.valueOf(FechaUtil.cantidadDiasEntreFechas(fechaHelp, fechaInicio)));
                 valoresParaValidacion+=String.valueOf(difDias);
                 
                 System.out.println("Corrigiendo Fecha - valoresParaValidacion: " + valoresParaValidacion);
                 fechaInicio = fechaHelp;
                 diaInicio = FechaUtil.getDiadelAnio(fechaInicio);
                 anio = FechaUtil.getAnio(fechaInicio);
             }
             if (anioActual == anio) {
                difDias = Integer.parseInt(String.valueOf(FechaUtil.cantidadDiasEntreFechas(fechaFin, fechaInicio)));
                difDias+=diaInicio;
             }else if(anioActual < anio){//Agregando If
                diaInicio+= cantDiasAnioActual;
                //dianow+= cantDiasAnioActual;
                difDias = Integer.parseInt(String.valueOf(FechaUtil.cantidadDiasEntreFechas(fechaFin, fechaInicio)));
                difDias+= diaInicio;
             }
             System.out.println("fechaInicio: " + fechaInicio + " fechaFin: " + fechaFin + " diaInicio: " + diaInicio + " dianow: " + dianow + " difDias: " + difDias);
             for (int i = 0; i < diasAPlanificar.length; i++) {
                 if (i>=diaInicio && i<=difDias) {
                     //System.out.println("incorporarRangosFechas: " + i);
                     if (i >= dianow) { 
                        // System.out.println("Entro incorporarRangosFechas: " + i);
                        diasAPlanificar[i] = Constantes.SOLICITUD_PLANIFICADA;
                     }
                     else if(i<cantDiasAnioActual)
                        diasAPlanificar[i] = Constantes.SOLICITUD_PLANIFICADA_PASADA; 
                     
                 }   
             }
          }
         return diasAPlanificar;
     }
     
     private String[] incorporarDiasLibresSap(String[] diasAPlanificar, Date fechaInicio, Date fechaFin, String solicitante,int anioActual, int cantDiasAnioActual){
         String[] diasLibres = planificacionManager.consultarDiasLibres(solicitante, FechaUtil.formatToStringSAP_YYYYMMDD(fechaInicio), FechaUtil.formatToStringSAP_YYYYMMDD(fechaFin));
         int diaDelAnio=0;
         Date d;
         int anio;int dianow = 0;
         Date fechanow = new Date();
         fechanow = FechaUtil.formatToDateSqlYYYYMMDD_DDMMYYYY(fechanow);
         dianow = FechaUtil.getDiadelAnio(fechanow);
         for (int i = 0; i < diasLibres.length; i++) {
             d = FechaUtil.stringToDateDDMMYYYYSin_(diasLibres[i]);
             diaDelAnio = FechaUtil.getDiadelAnio(d);
             anio = FechaUtil.getAnio(d);
             if(anio != anioActual) diaDelAnio+=cantDiasAnioActual;
//             diasAPlanificar[diaDelAnio] =Constantes.SOLICITUD_DIAS_LIBRES;
             //Agregado PRD
             
             if (diasAPlanificar[diaDelAnio].equals(Constantes.SOLICITUD_PLANIFICADA)) 
                 diasAPlanificar[diaDelAnio] =Constantes.SOLICITUD_DIAS_LIBRES_PLANIFICADAS;
             else if(diaDelAnio < dianow){
                 if (diasAPlanificar[diaDelAnio].equals(Constantes.SOLICITUD_PLANIFICADA_PASADA)) 
                     diasAPlanificar[diaDelAnio] =Constantes.SOLICITUD_DIAS_LIBRES_PLANIFICADAS_PASADA;
                  else 
                    diasAPlanificar[diaDelAnio] =Constantes.SOLICITUD_BLANCO_LIBRES_PASADA;
             }
             else{
                 diasAPlanificar[diaDelAnio] =Constantes.SOLICITUD_DIAS_LIBRES;
             }
         }
         return diasAPlanificar;
     }
     
     
       private String[] incorporarDiasGozadosSap(String[] diasGozads, Date fechaInicio, Date fechaFin, String solicitante,int anioActual, int cantDiasAnioActual){
         String[] diasGozados = planificacionManager.consultarDiasGozados(solicitante, FechaUtil.formatToStringSAP_YYYYMMDD(fechaInicio), FechaUtil.formatToStringSAP_YYYYMMDD(fechaFin));
         int diaDelAnio=0;
         Date d;
         int anio;
         for (int i = 0; i < diasGozados.length; i++) {
             d = FechaUtil.stringToDateDDMMYYYYSin_(diasGozados[i]);
             diaDelAnio = FechaUtil.getDiadelAnio(d);
             anio = FechaUtil.getAnio(d);
             if(anio != anioActual) diaDelAnio+=cantDiasAnioActual;
             diasGozads[diaDelAnio] = Constantes.SOLICITUD_DIAS_GOZADAS; 
         }
         return diasGozads;
     }
       
       
     private String[] clearArray(String[] diasAPlanificar, String valorInicio){
         for (int i = 0; i < diasAPlanificar.length; i++) 
                diasAPlanificar[i]=valorInicio;
         return diasAPlanificar;
     }
    
     private String[] clearArrayPlanificar(String[] diasAPlanificar,int hasta, String valorInicio, String valorFinal){
         for (int i = 0; i < diasAPlanificar.length; i++) 
              if(i<hasta)   
                diasAPlanificar[i]=valorInicio;
               else
                diasAPlanificar[i]=valorFinal;
         return diasAPlanificar;
     }
     
      private int cantDiasTranscurridosHastaElPresenteMes(){
          
               int cantDiasHastaElPresenteMes = 0;
               int anioActual = FechaUtil.getAnioActual();
               int mesActual = FechaUtil.getMesActual();
               for (int i = 1; i < mesActual; i++) {
                    cantDiasHastaElPresenteMes+= FechaUtil.cantidadDiasXNumMes(i, anioActual);
               }
                    System.out.println("cantDiasHastaElPresenteMes: " + cantDiasHastaElPresenteMes + " mesActual: " + mesActual); 
               return cantDiasHastaElPresenteMes;
      }
      
}
